Integrated circuits comprise a variety of circuit elements which are used to implement a circuit design. The circuit design must be laid out or “placed” according to the types and available locations of the circuit elements of an integrated circuit. The components of the circuit design must be assigned or placed in sites of the integrated circuit. In placing components of the circuit design, various factors are considered in deciding on the placement, and there are often competing interests and tradeoffs to achieve an optimal solution.
Components of a circuit design may be initially placed, and then randomly reconfigured using a process such as simulated annealing. However, the use of simulated annealing has several drawbacks. For example, an annealer uses thousands of random swaps to find a valid solution, often resulting in long run times for the placement. An annealer may also fail to converge to a solution even when a solution exists. Because of the random swapping, it may be possible that the optimal swaps may not be performed. Further, an annealer also uses random swaps which are dependent on the compiler. Each time a new placement is created, the specific swap instances are varied, leading to different results. Such variations in the results make debugging of the placement of a circuit design difficult.